package com.sky.orangehireserver.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 用户角色枚举
 *
 * @author sky
 */
@Getter
@AllArgsConstructor
public enum UserRoleEnum {

    /**
     * 超级管理员 - 拥有平台最高权限，管理所有企业和用户
     */
    SUPER_ADMIN("SuperAdmin", "超级管理员", "拥有平台最高权限，管理所有企业和用户"),

    /**
     * 企业管理员 - 由超级管理员管理，负责管理本企业的HR用户和招聘流程
     */
    ADMIN("Admin", "企业管理员", "由超级管理员管理，负责管理本企业的HR用户和招聘流程"),

    /**
     * 企业HR - 由企业管理员管理，负责具体的招聘工作
     */
    RECRUITER("Recruiter", "企业HR", "由企业管理员管理，负责具体的招聘工作"),

    /**
     * 企业面试官 - 由企业HR管理管理，负责对求职者的招聘面试
     */
    INTERVIEWER("Interviewer", "企业面试官", "由企业HR管理(面试委派面试官)，负责对求职者的招聘面试"),

    /**
     * HR助理 由企业HR管理，担任本企业HR的助理工作,承担相关事项
     */
    ASSISTANT("assistant","HR助理","由企业HR管理，担任本企业HR的助理工作,承担相关事项"),

    /**
     * 企业普通员工 企业普通员工,由企业HR负责增删改查事项
     */
    ORDINARY_EMPLOYEES("ordinaryEmployees","企业普通员工","企业普通员工,由企业HR负责增删改查事项"),
    /**
     * 求职者 - 普通求职用户，可以浏览职位、投递简历
     */
    JOB_SEEKER("JobSeeker", "求职者", "普通求职用户，可以浏览职位、投递简历");

    /**
     * 角色代码（存储在数据库中的值）
     */
    private final String code;

    /**
     * 角色名称
     */
    private final String name;

    /**
     * 角色描述
     */
    private final String description;

    /**
     * 根据角色代码获取枚举
     *
     * @param code 角色代码
     * @return 用户角色枚举
     */
    public static UserRoleEnum getByCode(String code) {
        if (code == null) {
            return null;
        }
        for (UserRoleEnum role : UserRoleEnum.values()) {
            if (role.getCode().equals(code)) {
                return role;
            }
        }
        return null;
    }

    /**
     * 检查是否为超级管理员
     *
     * @param code 角色代码
     * @return 是否为超级管理员
     */
    public static boolean isSuperAdmin(String code) {
        return SUPER_ADMIN.getCode().equals(code);
    }

    /**
     * 检查是否为企业管理员
     *
     * @param code 角色代码
     * @return 是否为企业管理员
     */
    public static boolean isAdmin(String code) {
        return ADMIN.getCode().equals(code);
    }

    /**
     * 检查是否为企业HR
     *
     * @param code 角色代码
     * @return 是否为企业HR
     */
    public static boolean isRecruiter(String code) {
        return RECRUITER.getCode().equals(code);
    }


    /**
     * 检查是否为企业面试官
     * @param code 角色代码
     * @return 是否为企业面试官
     */
    public static  boolean isInterviewer(String code){
        return  INTERVIEWER.getCode().equals(code);
    }

    /**
     * 检查是否为求职者
     *
     * @param code 角色代码
     * @return 是否为求职者
     */
    public static boolean isJobSeeker(String code) {
        return JOB_SEEKER.getCode().equals(code);
    }

    /**
     * 检查是否为企业内部用户（企业管理员或企业HR）
     *
     * @param code 角色代码
     * @return 是否为企业内部用户
     */
    public static boolean isEnterpriseUser(String code) {
        return isAdmin(code) || isRecruiter(code);
    }
}